//import org.junit.Assert.*
//import java.util.ArrayList
//import java.util.Arrays
//import java.util.Random
//import org.junit.Test
//
//class KPrimesTest {
//    private fun testing(act:String, exp:String) {
//        assertEquals(exp, act)
//    }
//    @Test
//    fun test1() {
//        println("Basic Tests")
//        testing(Arrays.toString(countKprimes(2, 0, 100)),
//                Arrays.toString(longArrayOf(4, 6, 9, 10, 14, 15, 21, 22, 25, 26, 33, 34, 35, 38, 39, 46, 49, 51, 55, 57, 58, 62, 65, 69, 74, 77, 82, 85, 86, 87, 91, 93, 94, 95)))
//        testing(Arrays.toString(countKprimes(3, 0, 100)),
//                Arrays.toString(longArrayOf(8, 12, 18, 20, 27, 28, 30, 42, 44, 45, 50, 52, 63, 66, 68, 70, 75, 76, 78, 92, 98, 99)))
//        testing(Arrays.toString(countKprimes(5, 1000, 1100)),
//                Arrays.toString(longArrayOf(1020, 1026, 1032, 1044, 1050, 1053, 1064, 1072, 1092, 1100)))
//        testing(Arrays.toString(countKprimes(5, 500, 600)),
//                Arrays.toString(longArrayOf(500, 520, 552, 567, 588, 592, 594)))
//        testing(Arrays.toString(countKprimes(7, 1000, 1500)),
//                Arrays.toString(longArrayOf(1008, 1056, 1080, 1088, 1120, 1200, 1216, 1248, 1458, 1472)))
//        testing(Arrays.toString(countKprimes(7, 10000, 10100)),
//                Arrays.toString(longArrayOf(10032, 10044, 10048)))
//        testing(Arrays.toString(countKprimes(7, 100000, 100100)),
//                Arrays.toString(longArrayOf(100008, 100016, 100035, 100048, 100064, 100100)))
//        testing(Arrays.toString(countKprimes(12, 100000, 100100)),
//                Arrays.toString(longArrayOf()))
//        testing(Arrays.toString(countKprimes(1, 2, 30)),
//                Arrays.toString(longArrayOf(2, 3, 5, 7, 11, 13, 17, 19, 23, 29)))
//        testing(Arrays.toString(countKprimes(8, 10000000, 10000200)),
//                Arrays.toString(longArrayOf(10000096, 10000152, 10000165, 10000200)))
//    }
//    //......
//    private fun primeFactorsSol(m:Long):Int {
//        var n = m
//        var factors = ArrayList<Long>()
//        var i:Long = 2
//        while (i * i <= n)
//        {
//            while (n % i == 0L)
//            {
//                factors.add(i)
//                n /= i
//            }
//            i++
//        }
//        if (n > 1) factors.add(n)
//        return factors.size
//    }
//    private fun countKprimesSol(k:Int, start:Long, end:Long):LongArray {
//        val kprimes = ArrayList<Long>()
//        for (i in start..end)
//            if (primeFactorsSol(i) == k)
//                kprimes.add(i)
//        val result = kprimes.stream().mapToLong({ l-> l }).toArray()
//        return result
//    }
//    private fun puzzleSol(s:Int):Int {
//        val a = countKprimesSol(1, 0, s.toLong())
//        val b = countKprimesSol(3, 0, s.toLong())
//        val c = countKprimesSol(7, 0, s.toLong())
//        var cnt = 0
//        var ia = 0
//        while (ia < a.size)
//        {
//            var ib = 0
//            while (ib < b.size)
//            {
//                var ic = 0
//                while (ic < c.size)
//                {
//                    if (a[ia] + b[ib] + c[ic] == s.toLong())
//                        cnt++
//                    ic++
//                }
//                ib++
//            }
//            ia++
//        }
//        return cnt
//    }
//    //......
//    private fun randint(rnd:Random, min:Int, max:Int):Int {
//        val randomNumber = rnd.nextInt(max - min) + min
//        return randomNumber
//    }
//    private fun wTests() {
//        for (i in 0..3)
//        {
//            val rnd = Random()
//            val n = randint(rnd, 2, 7)
//            val start = randint(rnd, 2000000, 8000000).toLong()
//            val end = start + randint(rnd, 1000, 5000)
//            testing(Arrays.toString(countKprimes(n, start, end)),
//                    Arrays.toString(countKprimesSol(n, start, end)))
//        }
//    }
//    @Test
//    fun wTests4() {
//        println("Random Tests **** countKprimes")
//        wTests()
//    }
//    private fun xTests() {
//        for (i in 0..3)
//        {
//            val rnd = Random()
//            val n = randint(rnd, 200, 700)
//            val sol = puzzleSol(n)
//            //System.out.println("puzzle " + n + " --> " + sol);
//            assertEquals(sol, puzzle(n))
//        }
//    }
//    @Test
//    fun xTests4() {
//        println("Random Tests **** puzzle")
//        xTests()
//    }
//}